টেস্টএনজি (TestNG) এর মাধ্যমে টেস্টিং কার্যক্রমের গতি এবং কার্যকারিতা বাড়ানোর জন্য কিছু পারফরমেন্স অপটিমাইজেশন টিপস রয়েছে। টেস্টিং প্রক্রিয়াটি যত দ্রুত এবং দক্ষভাবে সম্পন্ন করা যাবে, ততই সফটওয়্যার উন্নয়ন প্রক্রিয়া আরও কার্যকর হবে। নিচে TestNG এর পারফরমেন্স অপটিমাইজ করার জন্য কিছু কার্যকরী টিপস দেওয়া হলো।
১. প্যারালাল টেস্টিং (Parallel Testing) ব্যবহার করুন
Parallel Testing টেস্টের এক্সিকিউশন টাইম কমানোর জন্য একটি গুরুত্বপূর্ণ কৌশল। TestNG আপনাকে একাধিক টেস্ট মেথড, ক্লাস বা স্যুট প্যারালালভাবে চালানোর সুবিধা দেয়।
কিভাবে সেটআপ করবেন:
- parallel="methods": একাধিক মেথড প্যারালাল এক্সিকিউট করার জন্য।
- parallel="classes": একাধিক ক্লাস প্যারালাল এক্সিকিউট করার জন্য।
- parallel="tests": একাধিক টেস্ট প্যারালাল এক্সিকিউট করার জন্য।
<suite name="ParallelExecutionSuite" parallel="tests" thread-count="4">
<test name="Test1">
<classes>
<class name="com.example.TestClass1"/>
</classes>
</test>
<test name="Test2">
<classes>
<class name="com.example.TestClass2"/>
</classes>
</test>
</suite>
এইভাবে প্যারালাল এক্সিকিউশন সক্ষম করতে পারেন, যা দ্রুততম টেস্টিং পারফরমেন্স নিশ্চিত করবে।
২. নির্দিষ্ট টেস্ট চালান (Run Specific Tests)
সকল টেস্ট একসাথে চালানো সব সময় কার্যকরী নয়। মাঝে মাঝে শুধুমাত্র নির্দিষ্ট টেস্ট চালানো বেশি কার্যকরী হতে পারে, বিশেষ করে যদি আপনি ডেভেলপমেন্টের সময় কিছু নতুন টেস্ট অ্যাড করেছেন।
টেস্ট নির্বাচন:
- @Test(groups = "smoke"): শুধুমাত্র smoke গ্রুপের টেস্ট চালাতে।
- -Dtestng.groups="smoke": Command line এর মাধ্যমে শুধুমাত্র নির্দিষ্ট গ্রুপের টেস্ট চালান।
৩. ডিপেনডেন্ট টেস্ট ব্যবহার করুন
@Test(dependsOnMethods = "") ব্যবহারের মাধ্যমে আপনি নির্দিষ্ট টেস্টের ওপর নির্ভরশীল টেস্টগুলোকে কার্যকরভাবে সাজাতে পারবেন। একাধিক নির্ভরশীল টেস্টের মধ্যে শুধুমাত্র পূর্বের টেস্টটি সফল হলে পরবর্তী টেস্টটি চলবে, যা সম্পূর্ণ স্যুটের অপ্রয়োজনীয় টেস্ট চালানো বন্ধ করে দেয়।
@Test
public void loginTest() {
System.out.println("Login Test");
}
@Test(dependsOnMethods = {"loginTest"})
public void placeOrderTest() {
System.out.println("Place Order Test");
}
এভাবে আপনি শুধুমাত্র গুরুত্বপূর্ণ টেস্টগুলো চালাতে পারবেন এবং সময় বাঁচাতে পারবেন।
৪. ক্লিনআপ এবং ইনিশিয়ালাইজেশন মেথড ব্যবহার করুন
@BeforeMethod এবং @AfterMethod এর মাধ্যমে আপনি প্রতি টেস্টের আগে এবং পরে প্রয়োজনীয় ইনিশিয়ালাইজেশন এবং ক্লিনআপ কার্যক্রম করতে পারেন। সঠিকভাবে ক্লিনআপ করার মাধ্যমে আপনি সিস্টেমের অপ্রয়োজনীয় ওভারহেড কমাতে পারবেন।
@BeforeMethod
public void setup() {
System.out.println("Before each test");
}
@AfterMethod
public void teardown() {
System.out.println("After each test");
}
এটি আপনার টেস্টগুলোকে আরো বেশি কার্যকরী করে তোলে, বিশেষ করে যদি টেস্টের জন্য রিসোর্স রিলিজ করতে হয়।
৫. অনুপ্রাণিত অ্যাসারশন (Optimized Assertions)
অনেক সময়ে অতিরিক্ত অ্যাসারশন টেস্ট চলাকালীন সময়ে পারফরমেন্সে প্রভাব ফেলতে পারে। আপনি যদি শুধুমাত্র গুরুত্বপূর্ণ ফলাফলগুলোর জন্য অ্যাসারশন ব্যবহার করেন, তাহলে টেস্টগুলো দ্রুত সম্পন্ন হবে।
উদাহরণ:
@Test
public void testLogin() {
String username = "testUser";
String password = "testPass";
// রেসপন্স চেক করুন এবং অ্যাসারশন করুন
Assert.assertTrue(username.equals("testUser"));
}
যতটা সম্ভব assertEquals, assertTrue এবং অন্যান্য অ্যাসারশনগুলো সাবধানে ব্যবহার করুন, যা টাইম নষ্ট করার পরিবর্তে দ্রুত রেজাল্ট সরবরাহ করবে।
৬. ফ্ল্যাগস এবং কনফিগারেশন অপটিমাইজ করুন
কিছু TestNG configuration অপশন সঠিকভাবে সেট করতে পারলে আপনি আপনার টেস্ট এক্সিকিউশনের গতি বাড়াতে পারবেন। টেস্টের অগ্রাধিকারের (Priority) মাধ্যমে আপনি প্রথমে গুরুত্বপূর্ণ টেস্টগুলো চালাতে পারেন।
@Test(priority = 1)
public void loginTest() {
System.out.println("Login Test");
}
@Test(priority = 2)
public void placeOrderTest() {
System.out.println("Place Order Test");
}
এছাড়া, timeOut ব্যবহার করে নির্দিষ্ট সময়ের মধ্যে টেস্ট সম্পন্ন না হলে তাকে ব্যর্থ ঘোষণা করা যায়।
@Test(timeOut = 5000)
public void longRunningTest() {
// কিছু প্রক্রিয়া যা দীর্ঘ সময় নিতে পারে
}
৭. টেস্ট ডাটা সেভ করুন
অপ্রয়োজনীয়ভাবে ডেটা পুনরায় তৈরি না করে একবার ডেটা তৈরি করা এবং পুনরায় ব্যবহার করা হলে এটি পারফরমেন্সে সাহায্য করবে। Data Providers ব্যবহার করে টেস্ট ডাটা একটি ফাইল থেকে লোড করে একাধিক টেস্ট চালানো সম্ভব।
@DataProvider(name = "userData")
public Object[][] getData() {
return new Object[][] {
{ "user1", "password1" },
{ "user2", "password2" }
};
}
@Test(dataProvider = "userData")
public void testLogin(String username, String password) {
System.out.println("Testing with " + username + " and " + password);
}
সারাংশ
TestNG এর পারফরমেন্স অপটিমাইজেশন নিশ্চিত করার জন্য কিছু কৌশল গ্রহণ করা প্রয়োজন, যেমন প্যারালাল টেস্টিং, নির্দিষ্ট টেস্ট চালানো, ডিপেনডেন্ট টেস্ট, ইনিশিয়ালাইজেশন এবং ক্লিনআপ মেথড ব্যবহার করা, এবং অ্যাসারশন অপটিমাইজ করা। এই কৌশলগুলো গ্রহণ করে আপনি আপনার টেস্টিং কার্যক্রম দ্রুত এবং কার্যকরী করতে পারবেন, যা সিস্টেমের কর্মক্ষমতা বৃদ্ধি করবে।
Read more